#pragma once
#include "util/noncopyable.h"
#include <deque>
#include <tuple>
namespace net_tools::base
{
  class Base_buffer;
} // namespace net_tools::base

namespace net_tools::net
{
  class Buffer;
  class Buffer_reader : public net_tools::util::noncopyable
  {
    friend class Buffer;

  public:
    Buffer_reader();
    // 似乎无拷贝的访问会更慢点 相对与直接memcpy到一个连续的内存区内而言
    // 每次定位都需要判断是否会越界 是否需要拼接 如果只支持单个字节的访问
    // 那效率会比拷贝来的更快 但是cache的影响下 内存搬移并不慢 除非在非常大的
    // 内存中 不需要访问 而是转发的话 那无拷贝有着天然的优势
    // 待完成的实现
    char *operator[](unsigned int index);

  private:
    ~Buffer_reader() = default;
    // 修改当前所有buffer的read_index 并换区
    void Read_all();
    void Init(Buffer *cur_buffer);
    Buffer *cur_buffer_;
    unsigned int len_;
    std::deque<std::tuple<net_tools::base::Base_buffer *, unsigned int>> buffer_deque_;
  };

} // namespace net_tools::base